package com.ahorresas.modelo.daos;

import com.ahorresas.conexion.Conexion;
import com.ahorresas.modelo.beans.AhorroBean;
import com.ahorresas.modelo.sqls.AhorroSql;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class AhorroDao {
    
    Conexion conexion = new Conexion();
    Connection con;
    AhorroSql sql = new AhorroSql();
    
    public AhorroBean buscarAhorro(String idAhorro){
        con = conexion.getConexion();
        AhorroBean ahorro = null;
        try {
            PreparedStatement ps = con.prepareStatement(sql.buscarAhorro());
            ps.setInt(1, Integer.valueOf(idAhorro));
            
            ResultSet resultado = ps.executeQuery();
            if(resultado.next()){
                ahorro = new AhorroBean();
                ahorro.setIdAhorro(resultado.getInt("id_ahorro"));
                ahorro.setCliente(resultado.getString("cliente"));
                ahorro.setFechaInicio(resultado.getDate("fecha_inicio"));
                ahorro.setVigencia(resultado.getInt("vigencia"));
                ahorro.setEstado(resultado.getString("estado"));
            }
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
        finally{
            conexion.cerrarConexion(con);
        }
        return ahorro;
    }
    
    public List<AhorroBean> listarAhorros(){
        con = conexion.getConexion();
        List<AhorroBean> listaAhorros = new ArrayList<>();
        AhorroBean ahorro = null;
        try {
            PreparedStatement ps = con.prepareStatement(sql.listarAhorros());
            ResultSet resultado = ps.executeQuery();
            while(resultado.next()){
                ahorro = new AhorroBean();
                ahorro.setIdAhorro(resultado.getInt("id_ahorro"));
                ahorro.setCliente(resultado.getString("cliente"));
                ahorro.setFechaInicio(resultado.getDate("fecha_inicio"));
                ahorro.setVigencia(resultado.getInt("vigencia"));
                ahorro.setEstado(resultado.getString("estado"));
                
                listaAhorros.add(ahorro);
            }
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        } finally{
            conexion.cerrarConexion(con);
        }
        return listaAhorros;
    }
    
    public int crearAhorro(AhorroBean ahorro){
        con = conexion.getConexion();
        int resultado = 0;
        try {
            PreparedStatement ps = con.prepareStatement(sql.crearAhorro());
            ps.setString(1, ahorro.getCliente());
            ps.setDate(2, ahorro.getFechaInicio());
            ps.setInt(3, ahorro.getVigencia());
            ps.setString(4, ahorro.getEstado());
            
            resultado = ps.executeUpdate();
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        } finally {
            conexion.cerrarConexion(con);
        } 
        return resultado;
    }
    
    public int modificarAhorro(AhorroBean ahorro){
        con = conexion.getConexion();
        int resultado = 0;
        try {
            PreparedStatement ps = con.prepareStatement(sql.modificarAhorro());
            ps.setString(1, ahorro.getCliente());
            ps.setDate(2, ahorro.getFechaInicio());
            ps.setInt(3, ahorro.getVigencia());
            ps.setString(4, ahorro.getEstado());
            ps.setInt(5, ahorro.getIdAhorro());
            
            resultado = ps.executeUpdate();
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        } finally {
            conexion.cerrarConexion(con);
        }
        return resultado;
    }
    
    public int eliminarAhorro(Integer idAhorro){
        con = conexion.getConexion();
        int resultado = 0;
        try {
            PreparedStatement ps = con.prepareStatement(sql.eliminarAhorro());
            ps.setInt(1, idAhorro);
            
            resultado = ps.executeUpdate();
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        } finally {
            conexion.cerrarConexion(con);
        }
        return resultado;
    }
}